home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / enlightenment / e_object.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  5KB  |  99 lines

  1. /*
  2.  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  3.  */
  4. #ifdef E_TYPEDEFS
  5.  
  6. /* Object safety/debugging checks */
  7. /* */
  8. /* OBJECT_PARANOIA_CHECK is paranoid and checkes pointers and traps segv's */
  9. /* incase they dont work... very paranoid and slow. NB for backtrace to */
  10. /* work you need gcc, glibc and you need to compile with compile options of */
  11. /* -g -rdynamic and link with them too */
  12. /* OBJECT_CHECK is a simple null pointer and magic number check with no */
  13. /* debug output */
  14.  
  15. /* #define OBJECT_PARANOIA_CHECK */
  16. /* #define OBJECT_CHECK */
  17.  
  18. #ifndef __GLIBC__
  19. # ifdef OBJECT_PARANOIA_CHECK
  20. #  warning "Your system doesn't have glibc. Paranoid object checking disabled."
  21. #  undef OBJECT_PARANOIA_CHECK
  22. # endif
  23. #endif
  24.  
  25. #define E_OBJECT_MAGIC                  0xe0b9ec75
  26. #define E_OBJECT_MAGIC_FREED            0xe0bf6eed
  27. #define E_OBJECT(x)                     ((E_Object *)(x))
  28. #define E_OBJECT_CLEANUP_FUNC(x)        ((E_Object_Cleanup_Func)(x))
  29. #define E_OBJECT_ALLOC(x, type, cleanup_func) e_object_alloc(sizeof(x), (type), E_OBJECT_CLEANUP_FUNC(cleanup_func))
  30. #define E_OBJECT_DEL_SET(x, del_func)   e_object_del_func_set(E_OBJECT(x), E_OBJECT_CLEANUP_FUNC(del_func))
  31.  
  32. #ifdef OBJECT_PARANOIA_CHECK
  33. # define E_OBJECT_CHECK(x)                       do {if (e_object_error(E_OBJECT(x))) return;} while (0)
  34. # define E_OBJECT_CHECK_RETURN(x, ret)           do {if (e_object_error(E_OBJECT(x))) return ret;} while (0)
  35. #  define E_OBJECT_TYPE_CHECK(x, tp)             do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0)
  36. #  define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret) do {if ((E_OBJECT(x)->type) != tp) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0)
  37. # define E_OBJECT_IF_NOT_TYPE(x, tp)             if (E_OBJECT(x)->type != (tp))
  38. #else
  39. # ifdef OBJECT_CHECK
  40. #  define E_OBJECT_CHECK(x)                       do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return;} while (0)
  41. #  define E_OBJECT_CHECK_RETURN(x, ret)           do {if ((!E_OBJECT(x)) || (E_OBJECT(x)->magic != E_OBJECT_MAGIC)) return ret;} while (0)
  42. #  define E_OBJECT_TYPE_CHECK(x, tp)              do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return;} } while (0)
  43. #  define E_OBJECT_TYPE_CHECK_RETURN(x, tp, ret)  do {if ((E_OBJECT(x)->type) != (tp)) { fprintf(stderr, "Object type check failed in %s\n", __FUNCTION__); return ret;} } while (0)
  44. # define E_OBJECT_IF_NOT_TYPE(x, type)            if (E_OBJECT(x)->type != (type))
  45. # else
  46. #  define E_OBJECT_CHECK(x)               
  47. #  define E_OBJECT_CHECK_RETURN(x, ret)   
  48. #  define E_OBJECT_TYPE_CHECK(x, type)               
  49. #  define E_OBJECT_TYPE_CHECK_RETURN(x, type, ret)   
  50. # define E_OBJECT_IF_NOT_TYPE(x, type)
  51. # endif
  52. #endif
  53.  
  54. typedef void (*E_Object_Cleanup_Func) (void *obj);
  55.  
  56. typedef struct _E_Object E_Object;
  57.  
  58. #else
  59. #ifndef E_OBJECT_H
  60. #define E_OBJECT_H
  61.  
  62. struct _E_Object
  63. {
  64.    int                     magic;
  65.    int                     type;
  66.    int                     references;
  67.    E_Object_Cleanup_Func   del_func;
  68.    E_Object_Cleanup_Func   cleanup_func;
  69.    void                  (*free_att_func) (void *obj);
  70.    void                  (*del_att_func) (void *obj);
  71.    void                   *data;
  72.    unsigned char           deleted : 1;
  73. //   Evas_List              *crumbs;
  74. };
  75.  
  76. EAPI void *e_object_alloc               (int size, int type, E_Object_Cleanup_Func cleanup_func);
  77. EAPI void  e_object_del                 (E_Object *obj);
  78. EAPI int   e_object_is_del              (E_Object *obj);
  79. EAPI void  e_object_del_func_set        (E_Object *obj, E_Object_Cleanup_Func del_func);
  80. EAPI void  e_object_type_set            (E_Object *obj, int type);
  81. EAPI void  e_object_free                (E_Object *obj);
  82. EAPI int   e_object_ref                 (E_Object *obj);
  83. EAPI int   e_object_unref               (E_Object *obj);
  84. EAPI int   e_object_ref_get             (E_Object *obj);
  85. EAPI int   e_object_error               (E_Object *obj);
  86. EAPI void  e_object_data_set            (E_Object *obj, void *data);
  87. EAPI void *e_object_data_get            (E_Object *obj);
  88. EAPI void  e_object_free_attach_func_set(E_Object *obj, void (*func) (void *obj));
  89. EAPI void  e_object_del_attach_func_set (E_Object *obj, void (*func) (void *obj));
  90.  
  91. /*
  92. EAPI void  e_object_breadcrumb_add      (E_Object *obj, char *crumb);
  93. EAPI void  e_object_breadcrumb_del      (E_Object *obj, char *crumb);
  94. EAPI void  e_object_breadcrumb_debug    (E_Object *obj);
  95. */
  96.  
  97. #endif
  98. #endif
  99.